package fr.ajicommerce.core.service.implementation;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import fr.ajicommerce.core.dao.interfaces.IUtilisateurBackOfficeDAO;
import fr.ajicommerce.core.dto.UtilisateurBackOfficeDTO;
import fr.ajicommerce.core.entities.UtilisateurBackOffice;
import fr.ajicommerce.core.service.generics.GenericService;
import fr.ajicommerce.core.service.interfaces.UtilisateurBackOfficeService;
import fr.ajicommerce.core.entities.TypeUtilisateur;

@Component("utilisateurBackOfficeServiceImpl")
@Transactional
public class UtilisateurBackOfficeServiceImpl extends GenericService<UtilisateurBackOfficeDTO, UtilisateurBackOffice> implements UtilisateurBackOfficeService{

	@Autowired
	IUtilisateurBackOfficeDAO utilisateurBackOfficeDAO;
	
	public UtilisateurBackOfficeServiceImpl(
			Class<UtilisateurBackOffice> clazzOfA,
			Class<UtilisateurBackOfficeDTO> entityClassT) {
		super(clazzOfA, entityClassT);
		
	}
	
	public UtilisateurBackOfficeServiceImpl() {
		super(UtilisateurBackOffice.class, UtilisateurBackOfficeDTO.class);
	}

	@Override
	public UtilisateurBackOfficeDTO estUnUtilisateurBackOffice(String login, String motDePasse) {


		UtilisateurBackOfficeDTO utilisateurDTO =  new UtilisateurBackOfficeDTO();
		UtilisateurBackOffice utilBO = utilisateurBackOfficeDAO.findUtilisateurByLoginAndMDP(login, motDePasse);
		if ( utilBO == null)
			return null;
		
		BeanUtils.copyProperties(utilBO, utilisateurDTO);

		utilisateurDTO.setMyTypeDUtilisateur(utilBO.getTypeDUtilisateur());
		return utilisateurDTO;
	}

	@Override
	public List<UtilisateurBackOfficeDTO> find(String login, String nom,
			String prenom, TypeUtilisateur type) {
		List<UtilisateurBackOfficeDTO> listeDTO = new ArrayList<>();
		List<UtilisateurBackOffice> liste = null;
		
		liste = utilisateurBackOfficeDAO.find(login, nom, prenom, type);
		System.out.println("Dans service " + liste.size());
		if (liste == null)
			return null;
		for(UtilisateurBackOffice utilisateurBO : liste)
		{
			UtilisateurBackOfficeDTO utilisateurBODTO = new UtilisateurBackOfficeDTO();
			BeanUtils.copyProperties(utilisateurBO, utilisateurBODTO);
			utilisateurBODTO.setMyTypeDUtilisateur(utilisateurBO.getTypeDUtilisateur());
			listeDTO.add(utilisateurBODTO);
		}
		
		return listeDTO;
	}

	
	@Override
	public  UtilisateurBackOfficeDTO update(UtilisateurBackOfficeDTO entity)
	{
		UtilisateurBackOffice a = new UtilisateurBackOffice();
		
		BeanUtils.copyProperties(entity, a);
		a.setTypeDUtilisateur(entity.getMyTypeDUtilisateur());
		a = utilisateurBackOfficeDAO.update(a);
		BeanUtils.copyProperties(a, entity);
		entity.setMyTypeDUtilisateur(a.getTypeDUtilisateur());
		return entity;
		
		
	}
	
	@Override
	public  void save(UtilisateurBackOfficeDTO entity)
	{
		
		UtilisateurBackOffice a = new UtilisateurBackOffice();
		BeanUtils.copyProperties(entity, a);
		a.setTypeDUtilisateur(entity.getMyTypeDUtilisateur());
		utilisateurBackOfficeDAO.save(a);
		
	}
	
	@Override
	public  void delete(UtilisateurBackOfficeDTO entity)
	{
		UtilisateurBackOffice a = new UtilisateurBackOffice();
		BeanUtils.copyProperties(entity, a);
		a.setTypeDUtilisateur(entity.getMyTypeDUtilisateur());
		utilisateurBackOfficeDAO.delete(a);
	}

	@Override
	public UtilisateurBackOfficeDTO findUtilisateurBackOfficeByLogin(
			String login) {
		UtilisateurBackOfficeDTO utilisateurDTO =  new UtilisateurBackOfficeDTO();
		UtilisateurBackOffice utilBO = utilisateurBackOfficeDAO.findUtilisateurByLogin(login);
		if ( utilBO == null)
			return null;
		
		BeanUtils.copyProperties(utilBO, utilisateurDTO);

		utilisateurDTO.setMyTypeDUtilisateur(utilBO.getTypeDUtilisateur());
		return utilisateurDTO;
	}
	
	
}
